package ve.com.wayoyo.wuml_case;

import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompConector;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.Componente;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Typeface;

public class Painter {

	private static Painter _instance;
	private static int BackgroundColor = Color.WHITE;

	private Painter() {

	}

	static public Painter getInstancia() {
		if (_instance == null) {
			_instance = new Painter();
			return _instance;
		} else {
			return _instance;
		}
	}

	public Paint getBorderPaint(int estate) {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setAntiAlias(false);
		respuesta.setStyle(Style.STROKE);
		switch (estate) {
		case Componente.SELECTED:
			respuesta.setColor(Color.GREEN);
			break;

		case Componente.CONNECTING:
			respuesta.setColor(Color.BLUE);
			break;

		case Componente.LINKED:
			respuesta.setColor(Color.YELLOW);
			break;

		case Componente.INSIDE_PACKAGE:
			respuesta.setColor(Color.YELLOW);
			break;

		case Componente.INSIDE_DEFAULT_PACKAGE:
			respuesta.setColor(Color.RED);
			break;
		case Componente.INITIAL_NODE:
			respuesta.setColor(Color.BLUE);
			break;
		case Componente.FINAL_NODE:
			respuesta.setColor(Color.GREEN);
			break;
		case Componente.PATH_NODE:
			respuesta.setColor(Color.RED);
			break;
		case Componente.AVIABLE_NODE:
			respuesta.setColor(Color.GREEN);
			break;
		case Componente.UNAVIABLE_NODE:
			respuesta.setColor(Color.rgb(230, 230, 230));
			break;
		default:
			respuesta.setColor(Color.BLACK);
			break;
		}

		return respuesta;
	}

	public Paint getDefaultBorderPaint() {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setAntiAlias(false);
		respuesta.setColor(Color.BLACK);
		return respuesta;
	}

	public Paint getScrollBarPaint() {
		Paint respuesta = new Paint();
		respuesta.setColor(Color.rgb(145, 145, 145));
		respuesta.setStyle(Style.FILL);
		respuesta.setAlpha(200);
		return respuesta;
	}

	public Paint getLineTypePaint(int State, int lineType) {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setStyle(Style.STROKE);
		respuesta.setAntiAlias(true);
		if (lineType == CompConector.NORMAL_TYPE) {
			switch (State) {
			case CompConector.SELECTED_STATE:
				respuesta.setColor(Color.GREEN);
				break;
			case CompConector.PATH_STATE:
				respuesta.setColor(Color.RED);
				break;	
			default:
				respuesta.setColor(Color.BLACK);
				break;
			}
		} else if (lineType == CompConector.DASHED_TYPE) {
			respuesta.setPathEffect(new DashPathEffect(new float[] { 5, 5 }, 0));
			switch (State) {
			case CompConector.SELECTED_STATE:
				respuesta.setColor(Color.GREEN);
				break;
			case CompConector.PATH_STATE:
				respuesta.setColor(Color.RED);
				break;
			default:
				respuesta.setColor(Color.BLACK);
				break;
			}
		}
		return respuesta;
	}

	public Paint getArrowPaint(int State, boolean isFilled) {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		if (isFilled) {
			respuesta.setStyle(Style.FILL);
		} else {
			respuesta.setStyle(Style.STROKE);
		}
		respuesta.setAntiAlias(true);
		switch (State) {
		case CompConector.SELECTED_STATE:
			respuesta.setColor(Color.GREEN);
			break;	
		default:
			respuesta.setColor(Color.BLACK);
			break;
		}
		return respuesta;
	}
	
	public Paint getBlockPaint(int State, boolean isFilled) {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		if (isFilled) {
			respuesta.setStyle(Style.FILL);
		} else {
			respuesta.setStyle(Style.STROKE);
		}
		respuesta.setAntiAlias(true);
		switch (State) {
		case Componente.SELECTED:
			respuesta.setColor(Color.GREEN);
			break;	
		case Componente.VOID_STATE:
			respuesta.setColor(Color.WHITE);
			break;
		case Componente.CONNECTING:
			respuesta.setColor(Color.BLUE);
			break;
		case Componente.LINKED:
			respuesta.setColor(Color.YELLOW);
			break;
		default:
			respuesta.setColor(Color.BLACK);
			break;
		}
		return respuesta;
	}

	public Paint getTextPaint(boolean isCursive, float scale) {
		Paint respuesta = new Paint();
		respuesta.setAntiAlias(true);
		respuesta.setColor(Color.BLACK);
		if (isCursive) {
			respuesta.setTypeface(Typeface.create(Typeface.SERIF,
					Typeface.ITALIC));
		} else {
			respuesta.setTypeface(Typeface.SANS_SERIF);
		}
		respuesta.setFilterBitmap(true);
		respuesta.setTextSize(25 * scale);
		return respuesta;
	}

	public Paint getUnderLineTextPaint(boolean isCursive, float scale) {
		Paint respuesta = new Paint();
		respuesta.setAntiAlias(true);
		respuesta.setColor(Color.BLACK);
		respuesta.setUnderlineText(true);
		if (isCursive) {
			respuesta.setTypeface(Typeface.create(Typeface.SERIF,
					Typeface.ITALIC));
		} else {
			respuesta.setTypeface(Typeface.SANS_SERIF);
		}
		respuesta.setFilterBitmap(true);
		respuesta.setTextSize(25 * scale);
		return respuesta;
	}
	
	public Paint getFillPaint() {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setStyle(Style.FILL);
		respuesta.setColor(BackgroundColor);
		return respuesta;
	}

	public Paint getZoomTextPaint() {
		Paint respuesta = new Paint();
		respuesta.setAntiAlias(true);
		respuesta.setColor(Color.WHITE);
		respuesta.setTypeface(Typeface.SANS_SERIF);
		respuesta.setFilterBitmap(true);
		respuesta.setTextSize(50);
		return respuesta;
	}

	public Paint getBarPaint(int state) {
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setStyle(Style.FILL);
		if (state == Componente.SELECTED) {
			respuesta.setColor(Color.GREEN);
		} else if (state == Componente.CONNECTING) {
			respuesta.setColor(Color.BLUE);
		} else if (state == Componente.LINKED) {
			respuesta.setColor(Color.YELLOW);
		} else {
			respuesta.setColor(Color.BLACK);
		}

		return respuesta;
	}
	
	public Paint getTextFieldBorderPaint(){
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setAntiAlias(false);
		respuesta.setColor(Color.GREEN);
		respuesta.setStyle(Style.STROKE);
		respuesta.setPathEffect(new DashPathEffect(new float[] { 5, 5 }, 0));
		return respuesta;
	}
}
